// 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

// 给出两个整数 x 和 y，计算它们之间的汉明距离。

// 注意：
// 0 ≤ x, y < 231.

// 来源：力扣（LeetCode）
// 链接：https://leetcode-cn.com/problems/hamming-distance
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

/**
 * @param {number} x
 * @param {number} y
 * @return {number}
 */

let hammingDistanceJs = function (x, y) {
  return (x ^ y).toString(2).split('').reduce((num, e) => num = e === '1' ? num + 1 : num, 0)
};

let hammingDistanceTs1 = function (x: number, y: number): number {
  return (x ^ y).toString(2).split('').filter(item => item === '1').length
};

let hammingDistanceTs2 = function (x: number, y: number): number {
  let num = 0
  while (x > 0 || y > 0) {
    num += (x & 1) ^ (y & 1)
    x = x >> 1
    y = y >> 1
  }
  return num
};

console.log(hammingDistanceTs2(55, 1))